package com.hollycrm.hollysqm.analyzer.dic;


import java.util.*;


/**
 * 词典.
 * by zhaihw
 */
public final class Dictionary {
    /**
     * 停用词.
     */
    private static Set<String> stopWords = new HashSet<>();
    /**
     * 用户词典.
     */
    private static Set<String> userDictWords = new HashSet<>();
    /**
     * 保留词性列表.
     */
    private static Set<String> remainWords = new HashSet<>();
    /**
     * 关键词抽取保留的词性列表.
     */
    private static Set<String> keyWords = new HashSet<>();
    /**
     * 词性编码.
     */
    private static Map<String, String> speechCode = new HashMap<>();

    /**
     * 隐藏构造.
     */
    private Dictionary() { }
    static {
        /**
         * ==================================================
         *  词性说明
         *  n ns 名词，v 动词，a 形容词，un 用户词典，n_new 新词，t 时间，s 处所，
         *  r 代词，m 数词，q 量词，d 副词，u 助词，f 方位，b 区别词，z 状态词
         * ==================================================
         */


        //词性编码
        speechCode.put("n", "0");
        speechCode.put("un", "6");
        speechCode.put("n_new", "7");

        //关键词抽取保留的词性列表
        keyWords.add("n");
        keyWords.add("v");
        keyWords.add("a");

        //在去噪的时候保留以下词性的词
        remainWords.add("n"); //名词
        remainWords.add("ns"); //名词
        remainWords.add("s");//处所词
        remainWords.add("v"); //动词
        remainWords.add("a"); //形容词
        remainWords.add("un"); //用户词典
        remainWords.add("uu"); //用户词典
        remainWords.add("userDefine"); //用户词典,library\default.dic目录下已存在的自定义用户词典
        remainWords.add("n_new"); //新词
        
    }


    /**
     * 加载停用词.
     * @param stopWord 停用词列表
     */
    public static void loadStopWords(final List<String> stopWord) {
        stopWords.addAll(stopWord);
    }

    /**
     * 加载用户词典.
     * @param userWords 用户词典
     */
    public static void loadUserWords(final List<String> userWords) {
        userDictWords.addAll(userWords);
    }

    /**
     * 获取停用词集合.
     * @return 停用词集合
     */
    public static Set<String> getStopWords() {
        return stopWords;
    }

    /**
     * 获取用户词典集合.
     * @return 用户词典集合
     */
    public static Set<String> getUserDictWords() {
        return userDictWords;
    }

    /**
     * 去噪时保留的词性.
     * @return 词性
     */
    public static Set<String> getRemainWords() {
        return remainWords;
    }

    /**
     * 关键词抽取保留的词性列表.
     * @return 词性列表
     */
    public static Set<String> getKeyWords() {
        return keyWords;
    }

    /**
     * 词性编码.
     * @return 词性编码
     */
    public static Map<String, String> getSpeechCode() {
        return speechCode;
    }


}
